Spring Cloud Gateway হল একটি API গেটওয়ে, যা ক্লায়েন্ট-সাইড সিকিউরিটি এবং রুটিং টাস্কের জন্য ব্যবহৃত হয়। এটি আপনাকে বিভিন্ন সার্ভিসের উপর লোড ব্যালেন্সিং, সিকিউরিটি এবং রেট লিমিটিং সমর্থন সহ একটি কাস্টম গেটওয়ে সেটআপ করতে দেয়।
এই গেটওয়ে সাধারণত সার্ভিস-মেশ বা মাইক্রোসার্ভিস আর্কিটেকচারে ব্যবহৃত হয়। Spring Cloud Gateway-এ সিকিউরিটি ইন্টিগ্রেশন বিভিন্ন পদ্ধতিতে করা যেতে পারে, যেমন JWT (JSON Web Tokens), OAuth2, বা Basic Authentication। এই গেটওয়ে সার্ভিসে গেটওয়ে লেভেলে সিকিউরিটি নিশ্চিত করার পাশাপাশি ক্লায়েন্ট সাইডে সিকিউরিটি হ্যান্ডল করার জন্য কিছু কনফিগারেশন করা যায়।
Spring Cloud Gateway Setup
1. Spring Cloud Gateway Setup
প্রথমে, আপনার Spring Boot অ্যাপ্লিকেশনটি Spring Cloud Gateway হিসেবে কনফিগার করতে হবে।
ডিপেন্ডেন্সি যোগ করা:
pom.xml ফাইলে নিচের ডিপেন্ডেন্সি যোগ করুন:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-client</artifactId>
</dependency>
2. Gateway Configuration
application.yml বা application.properties ফাইলে Spring Cloud Gateway কনফিগারেশন করুন, যাতে API রুটিং এবং সিকিউরিটি সিস্টেম ঠিকভাবে কাজ করে।
spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/users/**
filters:
- AddRequestHeader=X-Request-Foo, Bar
- AddResponseHeader=X-Response-Foo, Baz
# Example of security configuration
security:
oauth2:
client:
registration:
google:
client-id: YOUR-CLIENT-ID
client-secret: YOUR-CLIENT-SECRET
scope: profile, email
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
authorization-grant-type: authorization_code
client-name: Google
provider:
google:
authorization-uri: https://accounts.google.com/o/oauth2/auth
token-uri: https://oauth2.googleapis.com/token
user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo
এই কনফিগারেশনটি Spring Cloud Gateway-এ OAuth2-এর মাধ্যমে ক্লায়েন্ট সাইড সিকিউরিটি চালু করে, এবং গুগল OAuth2 প্রোভাইডার ব্যবহার করে ইউজারের লগইন এবং অথোরাইজেশন সেটআপ করে।
3. Spring Cloud Gateway with Client-Side Security Integration (OAuth2)
ক্লায়েন্ট-সাইড সিকিউরিটির জন্য, OAuth2 সিকিউরিটি ব্যবহার করার মাধ্যমে Spring Cloud Gateway অ্যাপ্লিকেশন সুরক্ষিত করা যেতে পারে। নিচে OAuth2 সিকিউরিটি ইন্টিগ্রেশন এর উদাহরণ দেওয়া হলো:
OAuth2 Client Setup
Spring Cloud Gateway ক্লায়েন্ট হিসেবে OAuth2 এর সাহায্যে API কলগুলির সিকিউরিটি নিশ্চিত করতে, OAuth2 Client Configuration করতে হয়। spring-security-oauth2-client ডিপেনডেন্সি যুক্ত করুন এবং application.yml ফাইলে সঠিক কনফিগারেশন দিন।
spring:
security:
oauth2:
client:
registration:
google:
client-id: YOUR-CLIENT-ID
client-secret: YOUR-CLIENT-SECRET
scope: profile, email
authorization-grant-type: authorization_code
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
client-name: Google
provider:
google:
authorization-uri: https://accounts.google.com/o/oauth2/auth
token-uri: https://oauth2.googleapis.com/token
user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo
4. Spring Security Configuration with OAuth2
OAuth2LoginAuthenticationFilter ব্যবহার করে Spring Security এর সাহায্যে সিকিউরিটি কনফিগার করতে হবে। এই ফিল্টার ক্লায়েন্ট সাইডে সিকিউরিটি ভ্যালিডেশন করবে।
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableOAuth2Sso;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
@EnableOAuth2Sso
public class SecurityConfig {
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/login/**", "/error", "/oauth2/**").permitAll()
.anyRequest().authenticated()
.and()
.oauth2Login(); // Enable OAuth2 login
return http.build();
}
}
এটি OAuth2 সিকিউরিটি সিস্টেম তৈরি করবে যা গুগল বা অন্য OAuth2 প্রোভাইডার দ্বারা অ্যাক্সেস কন্ট্রোল নিশ্চিত করবে।
5. API Gateway সিকিউরিটি: JWT (JSON Web Token)
Spring Cloud Gateway এর সাথে JWT ব্যবহার করে সিকিউরিটি ইন্টিগ্রেশন করার জন্য, আপনাকে কিছু ফিল্টার এবং স্ট্র্যাটেজি কনফিগার করতে হবে।
JWT Filter Creation:
একটি কাস্টম ফিল্টার তৈরি করুন যা JWT টোকেন যাচাই করবে এবং নিরাপদ API রিকোয়েস্ট অনুমোদন করবে।
import org.springframework.security.oauth2.jwt.Jwt;
import org.springframework.security.oauth2.jwt.JwtDecoder;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain;
@Component
public class JwtTokenFilter implements WebFilter {
private final JwtDecoder jwtDecoder;
public JwtTokenFilter(JwtDecoder jwtDecoder) {
this.jwtDecoder = jwtDecoder;
}
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
String token = exchange.getRequest().getHeaders().getFirst("Authorization");
if (token != null && token.startsWith("Bearer ")) {
String jwtToken = token.substring(7);
Jwt jwt = jwtDecoder.decode(jwtToken); // Validate and decode JWT token
// Further processing can be done here, e.g., setting user details in SecurityContext
}
return chain.filter(exchange);
}
}
JWT Filter Integration in Gateway
এই ফিল্টারটি Spring Cloud Gateway এর রুট ফিল্টার হিসেবে যুক্ত করা যাবে। এইভাবে আপনি API গেটওয়ে লেভেলে সিকিউরিটি নিশ্চিত করতে পারবেন।
spring:
cloud:
gateway:
filters:
- name: JwtTokenFilter
6. Full Example (OAuth2 with Gateway)
application.yml-এ OAuth2 সেটআপ:
spring:
security:
oauth2:
client:
registration:
google:
client-id: YOUR-CLIENT-ID
client-secret: YOUR-CLIENT-SECRET
scope: profile, email
authorization-grant-type: authorization_code
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
client-name: Google
provider:
google:
authorization-uri: https://accounts.google.com/o/oauth2/auth
token-uri: https://oauth2.googleapis.com/token
user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo
cloud:
gateway:
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/users/**
SecurityConfig.java:
@Configuration
@EnableWebSecurity
@EnableOAuth2Sso
public class SecurityConfig {
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/login/**", "/error", "/oauth2/**").permitAll()
.anyRequest().authenticated()
.and()
.oauth2Login();
return http.build();
}
}
উপসংহার
- Spring Cloud Gateway ব্যবহার করে ক্লায়েন্ট সাইড সিকিউরিটি ইন্টিগ্রেশন অনেক সহজ এবং কার্যকরী।
- OAuth2 বা JWT ব্যবহার করে গেটওয়ে লেভেলে নিরাপত্তা নিশ্চিত করা যায়।
- Spring Security-এর মাধ্যমে OAuth2 ক্লায়েন্ট সাইড সিকিউরিটি ইন্টিগ্রেশন সহজেই করা সম্ভব।
- JWT ফিল্টার ব্যবহার করে আপনার API গেটওয়ে লেভেলে নিরাপত্তা নিয়ন্ত্রণ এবং যাচাই করা যেতে পারে।
এইভাবে, Spring Cloud Gateway এর সাথে ক্লায়েন্ট-সাইড সিকিউরিটি ইন্টিগ্রেশন করতে পারেন, যা নিরাপদ এবং স্কেলেবল API গেটওয়ে প্রদান করবে।
Read more